package inutan.game.prop;

import inutan.data.Resource.Type;
import inutan.game.business.GameFlowContext;
import inutan.game.entity.UserInfo;
import inutan.game.entity.prop.BaseItemInfo;
import org.ricks.orm.OrmContext;
import java.util.List;

public class FreeDiamondOperate implements OperatePropInterface{

    @Override
    public List<BaseItemInfo> props(GameFlowContext context) {
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class, context.getUserId()).get();
        return List.of(new BaseItemInfo(Type.FREEDIAMOND, Type.FREEDIAMOND, userInfo.getPayDiamond()));
    }

    @Override
    public void useProp(GameFlowContext context, List<BaseItemInfo> useItem) {
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class,context.getUserId()).get();
        int count = useItem.stream().mapToInt(x -> x.getCount()).sum();
        userInfo.setGold(userInfo.getDiamond() - count);
        System.err.println("消耗免费钻石：" + count + " , 剩余免费钻石：" + userInfo.getGold());
        OrmContext.me().update(userInfo);
    }

    @Override
    public List<BaseItemInfo> addProp(GameFlowContext context, List<BaseItemInfo> addProps) {
        int count = addProps.stream().mapToInt(x -> x.getCount()).sum();
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class,context.getUserId()).get();
        userInfo.setDiamond(userInfo.getDiamond() + count);
        OrmContext.me().update(userInfo);
        return addProps;
    }

    @Override
    public boolean checkItemNum(GameFlowContext context, List<BaseItemInfo> props) {
        int count = props.stream().mapToInt(x -> x.getCount()).sum();
        UserInfo userInfo = OrmContext.me().uniqueCacheLoad(UserInfo.class,context.getUserId()).get();
        return userInfo.getDiamond() >= count;
    }
}
